/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * Papeleta.java
 *
 * Created on 11-ene-2013, 17:33:55
 */
package sisvoto.vista;

import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.util.ArrayList;

import java.util.Date;
import javax.swing.JButton;

import sisvoto.DAO.ConsultasBD;
import sisvoto.ModeloDAO.VotantesEleccionDAO;
import sisvoto.ModeloDAO.VotoElectoralDAO;
import sisvoto.Utiles.Mensajes;
import sisvoto.modelo.Candidato;
import sisvoto.modelo.EleccionActual;
import sisvoto.modelo.EleccionListas;

import sisvoto.modelo.Elector;
import sisvoto.modelo.ImagenPartido;
import sisvoto.modelo.PartidoElectoral;
import sisvoto.modelo.VotantesEleccion;
import sisvoto.modelo.VotoElectoral;
import sisvoto.modeloTablas.ModelTableCandidatosPapeleta;

/*
 * @author DJ2-PC
 */
public class Papeleta extends javax.swing.JDialog {

    EleccionActual eleccionactual;
    ArrayList<EleccionListas> eleccionListas;
    ArrayList<PartidoElectoral> partidoselegidos;
    PartidoElectoral partido;
    PartidoElectoral partidofinal;
    private boolean votoblanco = false;
    private boolean votonulo = false;
    Elector elector;
     VotoElectoral v; 

    /** Creates new form Papeleta */
    public Papeleta(java.awt.Frame parent, boolean modal, Elector elector) throws IOException {
        super(parent, modal);
        this.elector = elector;
        this.v=new VotoElectoral();
        initComponents();
        disenioscroll();
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        imagePanel1 = new com.mycsistemas.swingec.panel.ImagePanel();
        curvesPanel1 = new com.mycsistemas.swingec.panel.CurvesPanel();
        jBtnConfVoto = new javax.swing.JButton();
        jScrollPane1 = new javax.swing.JScrollPane();
        scroll = new javax.swing.JPanel();
        jBtnConfVoto1 = new javax.swing.JButton();
        jBtnConfVoto2 = new javax.swing.JButton();
        jPanelCandidatos = new javax.swing.JPanel();
        jLblNombre = new javax.swing.JLabel();
        txtPartido = new javax.swing.JTextField();
        jPanelPartidoElect = new javax.swing.JPanel();
        panelImagen = new com.mycsistemas.swingec.panel.ImagePanel();
        jButton1 = new javax.swing.JButton();
        jPanelCandidatos1 = new javax.swing.JPanel();
        jScrollPane2 = new javax.swing.JScrollPane();
        tblCandidatos = new javax.swing.JTable();
        jPanelCandidatos2 = new javax.swing.JPanel();
        jLblNombre1 = new javax.swing.JLabel();
        txtVoto = new javax.swing.JTextField();
        jLblCandidatos1 = new javax.swing.JLabel();
        jLabel1 = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE);
        setTitle("Papeleta Electoral");

        imagePanel1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/sisvoto/Recursos/''_10102012_1738.jpeg"))); // NOI18N
        imagePanel1.setLayout(null);

        curvesPanel1.setLayout(null);

        jBtnConfVoto.setFont(new java.awt.Font("Franklin Gothic Medium", 1, 14));
        jBtnConfVoto.setIcon(new javax.swing.ImageIcon(getClass().getResource("/sisvoto/Recursos/warning_32.png"))); // NOI18N
        jBtnConfVoto.setText("ANULAR VOTO");
        jBtnConfVoto.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jBtnConfVotoActionPerformed(evt);
            }
        });
        curvesPanel1.add(jBtnConfVoto);
        jBtnConfVoto.setBounds(20, 260, 200, 60);

        scroll.setLayout(new java.awt.GridLayout(7, 1));
        jScrollPane1.setViewportView(scroll);

        curvesPanel1.add(jScrollPane1);
        jScrollPane1.setBounds(20, 70, 200, 150);

        jBtnConfVoto1.setFont(new java.awt.Font("Franklin Gothic Medium", 1, 14));
        jBtnConfVoto1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/sisvoto/Recursos/tick_32.png"))); // NOI18N
        jBtnConfVoto1.setText("CONFIRMAR VOTO");
        jBtnConfVoto1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jBtnConfVoto1ActionPerformed(evt);
            }
        });
        curvesPanel1.add(jBtnConfVoto1);
        jBtnConfVoto1.setBounds(20, 420, 200, 60);

        jBtnConfVoto2.setFont(new java.awt.Font("Franklin Gothic Medium", 1, 14));
        jBtnConfVoto2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/sisvoto/Recursos/document_32.png"))); // NOI18N
        jBtnConfVoto2.setText("VOTO EN BLANCO");
        jBtnConfVoto2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jBtnConfVoto2ActionPerformed(evt);
            }
        });
        curvesPanel1.add(jBtnConfVoto2);
        jBtnConfVoto2.setBounds(20, 340, 200, 60);

        jPanelCandidatos.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Partido Electoral", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Arial", 0, 10), java.awt.Color.white)); // NOI18N
        jPanelCandidatos.setForeground(new java.awt.Color(255, 255, 255));
        jPanelCandidatos.setOpaque(false);
        jPanelCandidatos.setLayout(null);

        jLblNombre.setFont(new java.awt.Font("Elephant", 0, 14));
        jLblNombre.setForeground(new java.awt.Color(255, 255, 255));
        jLblNombre.setText("Nombre:");
        jPanelCandidatos.add(jLblNombre);
        jLblNombre.setBounds(140, 10, 70, 30);
        jPanelCandidatos.add(txtPartido);
        txtPartido.setBounds(140, 40, 270, 30);

        jPanelPartidoElect.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Imagen", javax.swing.border.TitledBorder.RIGHT, javax.swing.border.TitledBorder.BELOW_BOTTOM, new java.awt.Font("Arial", 0, 10), java.awt.Color.white)); // NOI18N
        jPanelPartidoElect.setForeground(new java.awt.Color(255, 255, 255));
        jPanelPartidoElect.setOpaque(false);

        panelImagen.setLayout(null);

        javax.swing.GroupLayout jPanelPartidoElectLayout = new javax.swing.GroupLayout(jPanelPartidoElect);
        jPanelPartidoElect.setLayout(jPanelPartidoElectLayout);
        jPanelPartidoElectLayout.setHorizontalGroup(
            jPanelPartidoElectLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(panelImagen, javax.swing.GroupLayout.DEFAULT_SIZE, 98, Short.MAX_VALUE)
        );
        jPanelPartidoElectLayout.setVerticalGroup(
            jPanelPartidoElectLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(panelImagen, javax.swing.GroupLayout.DEFAULT_SIZE, 96, Short.MAX_VALUE)
        );

        jPanelCandidatos.add(jPanelPartidoElect);
        jPanelPartidoElect.setBounds(20, 20, 110, 120);

        jButton1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/sisvoto/Recursos/visto.png"))); // NOI18N
        jButton1.setText("ASIGNAR EL VOTO A ÉSTA LISTA");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });
        jPanelCandidatos.add(jButton1);
        jButton1.setBounds(140, 80, 270, 50);

        curvesPanel1.add(jPanelCandidatos);
        jPanelCandidatos.setBounds(230, 60, 430, 160);

        jPanelCandidatos1.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Candidatos", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Arial", 0, 10), java.awt.Color.white)); // NOI18N
        jPanelCandidatos1.setForeground(new java.awt.Color(255, 255, 255));
        jPanelCandidatos1.setOpaque(false);
        jPanelCandidatos1.setLayout(null);

        tblCandidatos.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "Dignidad", "Candidato"
            }
        ) {
            boolean[] canEdit = new boolean [] {
                true, false
            };

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        jScrollPane2.setViewportView(tblCandidatos);
        tblCandidatos.getColumnModel().getColumn(0).setResizable(false);
        tblCandidatos.getColumnModel().getColumn(1).setResizable(false);

        jPanelCandidatos1.add(jScrollPane2);
        jScrollPane2.setBounds(20, 20, 390, 120);

        curvesPanel1.add(jPanelCandidatos1);
        jPanelCandidatos1.setBounds(230, 230, 430, 160);

        jPanelCandidatos2.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Actualmente Su Voto Es.", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Arial", 0, 10), java.awt.Color.white)); // NOI18N
        jPanelCandidatos2.setForeground(new java.awt.Color(255, 255, 255));
        jPanelCandidatos2.setOpaque(false);
        jPanelCandidatos2.setLayout(null);

        jLblNombre1.setFont(new java.awt.Font("Elephant", 0, 14));
        jLblNombre1.setForeground(new java.awt.Color(255, 255, 255));
        jLblNombre1.setText("Voto:");
        jPanelCandidatos2.add(jLblNombre1);
        jLblNombre1.setBounds(30, 30, 70, 30);

        txtVoto.setBackground(new java.awt.Color(255, 204, 0));
        txtVoto.setEditable(false);
        txtVoto.setFont(new java.awt.Font("Lucida Console", 1, 18)); // NOI18N
        txtVoto.setHorizontalAlignment(javax.swing.JTextField.CENTER);
        jPanelCandidatos2.add(txtVoto);
        txtVoto.setBounds(90, 30, 320, 30);

        curvesPanel1.add(jPanelCandidatos2);
        jPanelCandidatos2.setBounds(230, 400, 430, 80);

        jLblCandidatos1.setFont(new java.awt.Font("Georgia", 3, 18));
        jLblCandidatos1.setForeground(new java.awt.Color(255, 255, 255));
        jLblCandidatos1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLblCandidatos1.setText("Partido Electoral");
        curvesPanel1.add(jLblCandidatos1);
        jLblCandidatos1.setBounds(20, 40, 200, 30);

        jLabel1.setFont(new java.awt.Font("Tahoma", 2, 11)); // NOI18N
        jLabel1.setForeground(new java.awt.Color(255, 255, 255));
        jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
        jLabel1.setText("Seleccione un partido");
        curvesPanel1.add(jLabel1);
        jLabel1.setBounds(30, 220, 190, 14);

        imagePanel1.add(curvesPanel1);
        curvesPanel1.setBounds(0, 0, 680, 560);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 684, Short.MAX_VALUE)
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addComponent(imagePanel1, javax.swing.GroupLayout.DEFAULT_SIZE, 684, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 558, Short.MAX_VALUE)
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addComponent(imagePanel1, javax.swing.GroupLayout.DEFAULT_SIZE, 558, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

private void jBtnConfVoto1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jBtnConfVoto1ActionPerformed
// TODO add your handling code here:
    String vot;
    if (txtVoto.getText().isEmpty()) {
        new Mensajes().StandarWarning(this, "Aún No Ha Ejercido Su Voto");
    } else {
       
        v.setFecha(new Date());
        if (votoblanco) {
            v.setVoto("BLANCO");
            vot = " SU VOTO EN BLANCO";
        } else {
            if (votonulo) {
                v.setVoto("NULO");
                vot = " SU VOTO NULO";
            } else {
                v.setVoto(String.valueOf(partidofinal.getId()));
                vot = " SU VOTO POR EL PARTIDO " + partidofinal.getNombre();
            }
        }
        v.setEleccion(eleccionactual.getEleccion());
       // v.setId(1);
        
        if (new Mensajes().ConfirmacionDialogowarning(this, "Ud ha Seleccionado" + vot + "\n Su voto será Regitrado. ¿Desea Continuar?") == 0) {
            VotoElectoralDAO vdao = new VotoElectoralDAO(v);
            try {
                vdao.persist();
                new Mensajes().ConfirmacionDialogotick(this, "SU VOTO FUE ALMACENADO CON ÉXITO");
                this.dispose();
            } catch (Exception ex) {
            }

            VotantesEleccion ve = new VotantesEleccion();
            ve.setFechavoto(new Date());
            ve.setElector(elector);
            ve.setEleccion(eleccionactual.getEleccion());

            VotantesEleccionDAO vedao = new VotantesEleccionDAO(ve);
            try {
                vedao.persist();
            } catch (Exception ex) {
            }
        }
    }

}//GEN-LAST:event_jBtnConfVoto1ActionPerformed

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
// TODO add your handling code here:
    if (partido != null) {
        partidofinal = partido;
        txtVoto.setText(partidofinal.getNombre());
        votoblanco = false;
        votonulo = false;
    } else {
        new Mensajes().StandarWarning(this, "Seleccione Un Partido");
    }
}//GEN-LAST:event_jButton1ActionPerformed

private void jBtnConfVotoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jBtnConfVotoActionPerformed
// TODO add your handling code here:
    if (votonulo == true) {
        votonulo = !votonulo;
        txtVoto.setText("");
        partidofinal = null;
        votoblanco = false;
    } else {
        votonulo = !votonulo;
        txtVoto.setText("VOTO NULO");
        partidofinal = null;
        votoblanco = false;
    }
}//GEN-LAST:event_jBtnConfVotoActionPerformed

private void jBtnConfVoto2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jBtnConfVoto2ActionPerformed
// TODO add your handling code here:
    if (votoblanco == true) {
        votoblanco = !votoblanco;
        txtVoto.setText("");
        partidofinal = null;
        votonulo=false;
    } else {
        votoblanco = !votoblanco;
        txtVoto.setText("VOTO EN BLANCO");
        partidofinal = null;
        votonulo=false;
    }
}//GEN-LAST:event_jBtnConfVoto2ActionPerformed

    /**
     * @param args the command line arguments
     */
 
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private com.mycsistemas.swingec.panel.CurvesPanel curvesPanel1;
    private com.mycsistemas.swingec.panel.ImagePanel imagePanel1;
    private javax.swing.JButton jBtnConfVoto;
    private javax.swing.JButton jBtnConfVoto1;
    private javax.swing.JButton jBtnConfVoto2;
    private javax.swing.JButton jButton1;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLblCandidatos1;
    private javax.swing.JLabel jLblNombre;
    private javax.swing.JLabel jLblNombre1;
    private javax.swing.JPanel jPanelCandidatos;
    private javax.swing.JPanel jPanelCandidatos1;
    private javax.swing.JPanel jPanelCandidatos2;
    private javax.swing.JPanel jPanelPartidoElect;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JScrollPane jScrollPane2;
    private com.mycsistemas.swingec.panel.ImagePanel panelImagen;
    private javax.swing.JPanel scroll;
    private javax.swing.JTable tblCandidatos;
    private javax.swing.JTextField txtPartido;
    private javax.swing.JTextField txtVoto;
    // End of variables declaration//GEN-END:variables

    private void disenioscroll() throws IOException {
        partidoselegidos = new ArrayList<>();
        ArrayList<EleccionActual> eleccionesactual = (ArrayList<EleccionActual>) new ConsultasBD().buscarPOR("EleccionActual", "estado", "'INICIADO'");
        if (!eleccionesactual.isEmpty()) {
            this.eleccionactual = eleccionesactual.get(0);
            this.eleccionListas = (ArrayList<EleccionListas>) new ConsultasBD().buscarPOR("EleccionListas", "eleccion", "'" + eleccionactual.getEleccion().getId() + "'");
            if (!eleccionListas.isEmpty()) {
                scroll.setLayout(new java.awt.GridLayout(eleccionListas.size(), 1));
                for (final EleccionListas elist : eleccionListas) {
                    JButton aux = new JButton();
                    aux.setText(elist.getPartido().getAliasp());
                    aux.setFont(new java.awt.Font("Franklin Gothic Medium", 1, 14));
                    aux.addActionListener(new ActionListener() {

                        @Override
                        public void actionPerformed(ActionEvent e) {
                            partido = elist.getPartido();
                            try {
                                actualizarform(partido);
                            } catch (IOException ex) {
                            }
                        }
                    });
                    scroll.add(aux);
                }
            } else {
                new Mensajes().StandarWarning(this, "No Existen Listas para Ésta Elección. \n     Consulte Con el Administrador");
            }
        }
    }

    private void actualizarform(PartidoElectoral partido) throws IOException {
        txtPartido.setText(partido.getNombre());
        cargarImagen(partido);
        actualizarTabla(partido);
    }

    private void actualizarTabla(PartidoElectoral partido) {
        ArrayList<Candidato> candidatos = (ArrayList<Candidato>) new ConsultasBD().buscarPOR("Candidato", "partido", "'" + partido.getId() + "'");
        ModelTableCandidatosPapeleta modelo = new ModelTableCandidatosPapeleta(candidatos);
        tblCandidatos.setModel(modelo);
        tblCandidatos.updateUI();
        modelo.tamanioColumnas(tblCandidatos);
    }

    private void cargarImagen(PartidoElectoral partido) throws IOException {
        ImagenPartido im = new ImagenPartido();
        Image imag = im.cargarImagen(partido.getId());
        if (imag != null) {
            this.panelImagen.setImage(imag);
        }
    }
}
